package br.com.sixsoftware.helpdesk.view;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.enterprise.context.SessionScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;

import br.com.sixsoftware.helpdesk.business.ClienteBC;
import br.com.sixsoftware.helpdesk.domain.Cliente;
import br.com.sixsoftware.helpdesk.exception.NegocioException;
import br.com.sixsoftware.helpdesk.util.SessaoUsuario;

@Named
@SessionScoped
public class ManterClienteMB implements Serializable {

	private static final long serialVersionUID = 1L;

	@Inject
	private FacesContext facesContext;

	@Inject
	private SessaoUsuario sessaoUsuario;

	@Inject
	private ClienteBC clienteBC;

	private Cliente cliente;

	private List<Cliente> listaClientes;

	public ManterClienteMB() {
		cliente = new Cliente();
		listaClientes = new ArrayList<Cliente>();
	}


	public String preInserirCliente() {
		cliente = new Cliente();
		return "manterCliente.xhtml";
	}

	public String preListarTodosCliente() {
		listaClientes.clear();
		try {
			listaClientes.addAll(clienteBC.listarTodosClientes());
		} catch (NegocioException ne) {
			facesContext.addMessage("", new FacesMessage(FacesMessage.SEVERITY_ERROR, ne.getMessage(), null));
		}
		return "listarTodosClientes.xhtml";
	}

	public int getQuantidadeClientes() {
		return listaClientes.size();
	}

	public String inserirCliente() {
		try {
			clienteBC.inserirCliente(cliente);
			facesContext.addMessage("", new FacesMessage(FacesMessage.SEVERITY_INFO, "Cliente inserido com sucesso",
					null));
			cliente = new Cliente();
			return "index.xhtml";
		} catch (NegocioException ne) {
			facesContext.addMessage("", new FacesMessage(FacesMessage.SEVERITY_ERROR, ne.getMessage(), null));
			return "manterCliente.xhtml";
		}
		
	}

	public String alterarCliente() {
		try {
			clienteBC.alterarCliente(cliente);
			facesContext.addMessage("", new FacesMessage(FacesMessage.SEVERITY_INFO, "Cliente alterado com sucesso",
					null));
			return "index.xhtml";
		} catch (NegocioException ne) {
			facesContext.addMessage("", new FacesMessage(FacesMessage.SEVERITY_ERROR, ne.getMessage(), null));
			return "manterCliente.xhtml";
		}
		
	}

	public String preAlterarCliente() {
		Cliente.clonar((Cliente) sessaoUsuario.getUsuarioAtual(), this.cliente);
		return "manterCliente.xhtml";
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public List<Cliente> getListaClientes() {
		return listaClientes;
	}

	public void setListaClientes(List<Cliente> listaClientes) {
		this.listaClientes = listaClientes;
	}

	public Boolean getModoEdicao() {
		return cliente.getId() != null;
	}

	public Boolean getModoInclusao() {
		return cliente.getId() == null;
	}

}
